home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / sys / kowin14d.lzh / doc / library / GOELIB.MAN < prev    next >
Text File  |  1992-10-26  |  10KB  |  351 lines

  1. Ko-Window パーツライブラリ goelib.a v1.04 1992/10/25 by Goemon
  2.  
  3.  
  4. ○スライドスイッチ(スライダー)関数
  5.  
  6. ・スライドスイッチ構造体
  7.  
  8.   スライドスイッチ関数では以下の構造体を使用してスライドスイッチ処理を行います
  9.  
  10.  
  11.     typedef    struct    {    /* スライドスイッチ構造体 */
  12.         int    num;    /* 番号 */
  13.         int    x;    /* x座標 */
  14.         int    y;    /* y座標 */
  15.         int    max;    /* 最大 */
  16.         int    nx;    /* 数値表示のx座標 */
  17.         int    ny;    /* 数値表示のy座標 */
  18.         int    nmin;    /* 数値の最小値 */
  19.         int    nmax;    /* 数値の最大値    */
  20.         int    nmode;    /* 数値表示モード(0は普通,1は反転) */
  21.         int    npos;    /* 現在位置(相対位置)*/
  22.         int    nc;    /* 表示桁数(符号は含まず)*/
  23.         int    nsize;    /* 文字サイズ */
  24.         char    nstr[16];/*数値表示用文字バッファ*/
  25.         GSliderPat    *gspat;        /*スライダーパターン*/
  26.     }    GSlider;
  27.  
  28.     typedef    struct    {    /* スライドスイッチパターン構造体 */
  29.         int    mode;        /* 0:横 1:縦 */
  30.         Sheet    *Slider;    /*スライダーパターン*/
  31.         Sheet    *Rale[2];    /*溝パターン*/
  32.         Sheet    *Start;        /*溝の開始パターン*/
  33.         Sheet    *End[2];    /*溝の終了パターン*/
  34.     }    GSliderPat;
  35.  
  36. ※パターン設定の規則
  37.  
  38.  必ずすべてのパターンの大きさは同じにして下さい。
  39.  配列になっているパターンは、0が偶数位置用のパターン、1が奇数位置用のパターン
  40.  です。
  41.  また、標準パターンとして、以下のパターンが設定されています。
  42.  
  43.  GSliderPat    GSliderStPatX;(横方向)
  44.  
  45.  GSliderPat    GSliderStPatY;(縦方向)
  46.  
  47.  
  48. ・スライドスイッチの仕様について
  49.  
  50.  番号は、後ででてくる登録簿管理で使用します。
  51.  x,y座標は、ウインドウ上でのスライドスイッチの左上の座標です。
  52.  最大は、ウインドウ上のスライドする量に対する最大値です。
  53.  nx,nyは、ウインドウ上での数字表示の左上の座標です。
  54.  nmin,nmaxは、表示する数値の最小、最大値です。
  55.  表示桁数は符号も含む桁数です。0以上の数値しか使用しない場合は、符号の桁は考
  56.  えなくても構いません。
  57.  また、0を指定すると数字の表示は行いません。
  58.  現在位置はnmin~nmaxの間を指定して下さい。相対量で扱います。
  59.  数値表示モードは、0なら普通、1なら反転します。(特に縦のスライドスイッチで
  60.  使用すると思われます)
  61.  文字サイズは、12/16/24のいずれかを指定します。
  62.  文字バッファは、いじらないで下さい。数値の表示に使用しています。
  63.  スライダーパターンは、スライドスイッチパターン構造体のポインタを指定して下さ
  64.  い。
  65.  ドット数より数値の幅が大きい場合は、数値が飛ばされてしまいますが、数値表示の
  66.  上でクリックする事により微調整出来ますので、気にしなくても大丈夫だと思われま
  67.  す。
  68.  
  69.  
  70. ・スライドスイッチの描画
  71. int    GSliderSetDraw( gs, dbuf );
  72.  GSlider    *gs;    スライドスイッチ構造体
  73.  DrawBuf    *dbuf;    描画バッファ
  74.  
  75.  スライドスイッチ構造体を元にスライドスイッチを描画します。
  76.  スライドの溝(?)や数字も描画します。
  77.  戻り値はDrawBufに書き込んだ個数です。
  78.  この関数は、主にEventRedraw内で使用します。
  79.  
  80.  
  81. ・スライドスイッチの移動
  82. int    GSliderSetPos( gs, dbuf, pos );
  83.  GSlider    *gs;    スライドスイッチ構造体
  84.  DrawBuf    *dbuf;    描画バッファ
  85.  int        pos;    スライドスイッチの移動先
  86.  
  87.  スライドスイッチ構造体のposから第3引き数の位置までスイッチを移動します。
  88.  用途としては、値の微調節などで、外部からコントロールする場合などではないかと
  89.  思われます。(一応範囲外チェックはしています。)
  90.  数字も書き換えます。
  91.  戻り値はDrawBufに書き込んだ個数です。
  92.  この関数は、主にEventMouseSwitch内で使用します。
  93.  
  94.  
  95. ・マウス位置からPOS位置計算
  96. int    GSliderGetMPos( gs, mx, my, stat1, stat2, stat3 )
  97.  GSlider    *gs;    スライドスイッチ構造体
  98.  int        mx;    マウスカーソルのx座標
  99.  int        my;    マウスカーソルのy座標
  100.  int        stat1;    スライドスイッチの有効条件
  101.  int        stat2;    数字の有効条件(+)
  102.  int        stat3;    数字の有効条件(-)
  103.  
  104.  マウスカーソルの位置とマウスボタンの状態(第2、第3引き数、第4引き数:x,y
  105.  ,stat1)よりスライドスイッチ登録簿内から第2引き数で指定したキー番号のスライ
  106.  ドスイッチに対するPOS位置を計算します。
  107.  数字の表示の上にマウスカーソルがある場合、第5引き数で指定した状態を満たす
  108.  場合、pos+1、第6引き数で指定した条件を満たす場合、pos-1が返ります。
  109.  この関数は、EventMouseSwitch内で使用します。
  110.  
  111.  
  112. ・マウスがスライダーの範囲内に入っているか
  113. int    GSliderGetMPoint( gs, mx, my )
  114.  GSlider    *gs;    スライドスイッチ構造体
  115.  int        mx;    マウスカーソルのx座標
  116.  int        my;    マウスカーソルのy座標
  117.  
  118.  マウスの位置(第2、第3引き数:x,y)が指定されたスライダーを指すかどうかを
  119.  調べます。(0以外の時、マウスカーソルがスライダーを指しています)
  120.  数字表示の位置も関知します。
  121.  これは、EventMouseSwitch内で使用します。
  122.  マクロです。
  123.  
  124.  
  125. ・スライダーの現在位置を得る
  126. int    GSliderGetPos( gs )
  127.  GSlider    *gs;    スライドスイッチ構造体
  128.  
  129.  指定したスライダーのPOS位置を得ます。
  130.  マクロです。
  131.  
  132.  
  133. ○スライドスイッチ登録簿
  134.  
  135.  スライドスイッチを索引によって管理します。これにより、スライドスイッチの扱い
  136.  が、楽になります。(?)
  137.  これを使用する場合、ヒープ領域を使用しますので、WindowHeapSizeを確保して下さ
  138.  い。
  139.  これらの関数は以下の構造体を使用します。
  140.  
  141.     typedef    struct    {    /* スライドスイッチ辞書構造体 */
  142.         int    max;    /*最大登録件数*/
  143.         int    num;    /*現在の登録件数*/
  144.         GSlider    *gs;    /*スライドスイッチ構造体の先頭*/
  145.     }    GSliderReg;
  146.  
  147.  
  148. ・登録簿の作成
  149. void    GsRegOpen( gsr, max )
  150.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  151.  int        max;    スライドスイッチの最大登録件数
  152.  
  153.  スライドスイッチ登録簿を作成します。第2引き数は、登録するスライドスイッチの
  154.  最大登録数です。
  155.  マクロです。
  156.  これは、EventOpen内で使用します。
  157.  
  158.  
  159. ・登録簿の破棄
  160. void    GsRegClose( gsr )
  161.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  162.  
  163.  スライドスイッチ登録簿を破棄します。
  164.  マクロです。
  165.  これは、EventClose内で使用します。
  166.  
  167.  
  168. ・スライドスイッチ登録
  169. void    GSRegSetGSlider( gsr, num, x, y, len, nmin, nmax, nmode, pos,
  170.                      nx, ny, nc, nsize, gsp )
  171.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  172.  int        num;    スライドスイッチ識別番号
  173.  int        x;    スライドスイッチのx座標
  174.  int        y;    スライドスイッチのy座標
  175.  int        len;    スライド幅
  176.  int        nmin;    数字表示の最大値
  177.  int        nmax;    数字表示の最小値
  178.  int        nmode;    数字表示モード(0:普通,1:反転)
  179.  int        nx;    数字表示のx座標
  180.  int        ny;    数字表示のy座標
  181.  int        nc;    数字の最大桁数(0だと表示しない)
  182.  int        nsize;    数字表示の文字サイズ
  183.  GSliderPat    *gsp;    スライドスイッチパターン構造体
  184.  
  185.  スライドスイッチ登録簿にスライドスイッチを登録します。
  186.  スライド幅は、溝の長さです。
  187.  もし、スライドスイッチのパターンの幅が6ドットの場合、実際に移動するドット数
  188.  は、指定した長さよりも6ドット引かれます。
  189.  (例えば30で指定すると24ドットしか動かないわけです。)
  190.  これは、EventOpen内で使用します。
  191.  
  192.  
  193. ・登録簿内のスライダーの描画
  194. int    GsRegSetDraw( gsr, dbuf );
  195.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  196.  DrawBuf    *dbuf;    描画バッファ
  197.  
  198.  スライドスイッチ登録簿を元にスライドスイッチをすべて描画します。
  199.  戻り値はDrawBufに書き込んだ個数です。
  200.  この関数は、EventRedraw内で使用します。
  201.  
  202.  
  203. ・マウスカーソル位置から登録簿内の任意のスライダーを選ぶ */
  204. int    GsRegSelectGSlider( gsr, mx, my );
  205.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  206.  int        mx;    マウスカーソルのx座標
  207.  int        my;    マウスカーソルのy座標
  208.  
  209.  ウインドウ内で、マウスの指すスライドスイッチを登録簿内から選び出します。
  210.  戻り値は、識別番号です。
  211.  主にEventMouseSwitch内で使用します。
  212.  
  213.  
  214. ・登録簿検索
  215. GSlider    *GsRegGetGSlider( gsr, num );
  216.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  217.  int        num;    スライドスイッチ識別番号
  218.  
  219.  スライドスイッチ登録簿内から第2引き数で指定したキー番号のスライドスイッチ構
  220.  造体を得ます。
  221.  
  222.  
  223. ・スライダーの現在位置を得る
  224. int    GsRegGetPos( gsr, num )
  225.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  226.  int        num;    スライドスイッチ識別番号
  227.  
  228.  GSliderGetPosと同じです。
  229.  マクロです。
  230.  
  231.  
  232. ・マウス位置からPOS位置計算
  233. int    GsRegGetMPos( gsr, num, mx, my, stat1, stat2, stat3 )
  234.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  235.  int        num;    スライドスイッチ識別番号
  236.  int        mx;    マウスカーソルのx座標
  237.  int        my;    マウスカーソルのy座標
  238.  int        stat1;    スライドスイッチの有効条件
  239.  int        stat2;    数字の有効条件(+)
  240.  int        stat3;    数字の有効条件(-)
  241.  
  242.  動作はGSliderGetMPosと同じです。
  243.  マクロです。
  244.  
  245.  
  246. ・スライドスイッチの移動
  247. int    GsRegSetPos( gsr, dbuf, num, pos )
  248.  GSliderReg    *gsr;    スライドスイッチ登録簿構造体
  249.  DrawBuf    *dbuf;    描画バッファ
  250.  int        num;    スライドスイッチ識別番号
  251.  int        pos;    スライドスイッチの移動先
  252.  
  253.  動作はGSliderSetPosと同じです。
  254.  マクロです。
  255.  
  256.  
  257.  
  258. ・具体的な使用例(?)(うぅぅむ、参考になるのかなぁ)
  259.  
  260. #include    <stdio.h>
  261. #include    <iocslib.h>
  262. #include    <wlib.h>
  263. #include    <parts.h>
  264. #include    <winop.h>
  265. #include    <goelib.h>
  266.  
  267. #define        SW1    1
  268. #define        SW2    2
  269.  
  270. GSliderReg    gsr;
  271. int    WindowHeapSize= 2 * 1024;
  272.  
  273. EventExec( wp, info )
  274. WindowID    wp;
  275. EventInfo    *info;
  276. {
  277.     DrawBuf    dbuf[256];
  278.     DrawBuf    *pdbuf;
  279.     char    wa[5];
  280.     int    dumy;
  281.     pdbuf = dbuf;
  282.     switch( info->option ){
  283.     case EventOpen:
  284.         WindowSetEventAttr( wp, EventAttrDefault);
  285. /**/
  286.         GSRegOpen(&gsr,2);
  287.         GSRegSetGSlider(&gsr,SW1,2,2,68,-45,45,0,0,20,20,3,12,&GSliderStPatX);
  288.         GSRegSetGSlider(&gsr,SW2,2,16,36,0,15,1,0,20,46,3,12,&GSliderStPatY);
  289. /**/
  290.         WindowRedraw( wp );
  291.         return    TRUE;
  292.     case EventResize:
  293.         return    TRUE;
  294.     case EventClose:
  295. /**/        GSRegClose(&gsr);
  296.         WindowClose( wp );
  297.         WindowConnectionClose();
  298.         return    TRUE;
  299.     case EventRedraw:
  300.         DrawSetClear( pdbuf, 1 );
  301.         pdbuf++;
  302. /**/        pdbuf += GSRegSetDraw( &gsr,pdbuf);
  303.         DrawSetLine( pdbuf,19,19,38,32,ShadowDown,OptionShadow);
  304.         pdbuf++;
  305.         DrawSetLine( pdbuf,19,45,38,58,ShadowDown,OptionShadow);
  306.         pdbuf++;
  307.         WindowDraw( wp, dbuf, pdbuf - dbuf );
  308.         return    TRUE;
  309.     case EventMouseSwitch:
  310.         {
  311.             int    mx = info->x;
  312.             int    my = info->y;
  313.             int    wx;
  314.             int    wy;
  315.             int    stat1 = info->LeftStat;
  316.             int    stat2 = info->LeftON;
  317.             int    stat3 = info->RightON;
  318.             int    num;
  319.             int    pos;
  320. /**/
  321.             if(num = GSRegSelectGSlider( &gsr,mx,my)){
  322.                 pos = GSRegGetMPos(&gsr,num,mx,my,
  323.                             stat1,stat2,stat3);
  324.                 pdbuf += GSRegSetPos(&gsr,pdbuf,num,pos);
  325. /**/
  326.                 switch(num){
  327.                 case    SW1:
  328.                     /*値が変わった!*/
  329.                     break;
  330.                 case    SW2:
  331.                     /*これも値が変わった!(c)COR.(笑)*/
  332.                     break;
  333.                 }
  334.                 WindowDraw( wp, dbuf, pdbuf - dbuf );
  335.             }
  336.         }
  337.         return    TRUE;
  338.     }
  339.     return    FALSE;
  340. }
  341.  
  342. WindowMain( argc, argv )
  343. int    argc;
  344. char    **argv;
  345. {
  346.     int    x= 8, y= 8, h= 200, v= 100;
  347.     
  348.     argc= AnalyzeArgs( argc, argv, &x, &y, 0, 0 );
  349.     WindowTitleOpen( x, y, h, v, NULL, "GSliderTest", Close|Push , EventExec );
  350. }
  351.